<?php

namespace App\Http\Controllers;

use App\Http\Service\IMService;
use App\Models\Expenses;
use App\Utils\BaiDuVoice;
use App\Utils\MyRabbitMQ;
use App\Utils\MyRedis;
use GatewayWorker\Lib\Db;
use Illuminate\Support\Facades\Log;

class Test extends Controller
{
    public function testTTS()
    {
        $text = '测试短语音生成';
        $voice = new BaiDuVoice();
        $res = $voice->tts($text);
        print_r($res);
    }

    public function test()
    {
//        ini_set('memory_limit', '128M');
//        set_time_limit(500);
        //测试生成budget数据
        //随机设置一下用户的消费信息 用来测试接口和展示
        // 设置一下预算
        // 从三年前开始
//        $budget = [2300, 2700, 3000, 3300, 3500, 3800];
//        $year = [2021, 2022, 2023, 2024];
//        $month = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
//        $budget_list = [];
//        foreach ($year as $y) {
//            foreach ($month as $m) {
//                if ($y === 2024 && $m > 6) {
//                    break;
//                }
//                $timestamp = now();
//                //随机生成一条budget数据
//                $budget_list[] = [
//                    'user_id' => 1,
//                    'budget' => $budget[array_rand($budget)],
//                    'year' => $y,
//                    'month' => $m,
//                    'create_time' => $timestamp,
//                    'update_time' => $timestamp,
//                ];
//            }
//        }
//
//        //随机生成支出数据 每个月每一天都要生成1~5条
//        //预算为3000左右 所以每笔应该在10~35元 并且有小数点用于测试
//        $types = Expenses::$types;
//        $expenses_list = [];
//        foreach ($year as $y) {
//            foreach ($month as $m) {
//                //获取当月有多少天
//                //6月特殊处理一下
//                if ($y == 2024 && $m == 6) {
//                    $day = 5;
//                } else {
//                    $day = cal_days_in_month(CAL_GREGORIAN, $m, $y);
//                }
//                for ($d = 1; $d <= $day; $d++) {
//                    $items = mt_rand(0, 5);
//                    $money = mt_rand(10, 35);
//                    $money_dot = mt_rand(0, 99);
//                    $money = $money + ($money_dot / 100);
//                    $type = array_rand($types);
//                    $title = $types[$type];
//
//                    for ($i = 0; $i < $items; $i++) {
//                        $timestamp = now();
//                        $expenses_list[] = [
//                            'user_id' => 1,
//                            'money' => $money,
//                            'year' => $y,
//                            'month' => $m,
//                            'day' => $d,
//                            'type' => $type,
//                            'title' => $title,
//                            'content' => "{$y}-{$m}-{$d} {$title}花费:¥{$money}元",
//                            'create_time' => $timestamp,
//                            'update_time' => $timestamp,
//
//                        ];
//                    }
//                }
//            }
//        }
//
//        \Illuminate\Support\Facades\DB::table('budget')->insert($budget_list);
//        \Illuminate\Support\Facades\DB::table('expenses')->insert($expenses_list);
//        return response()->json(create_response_data('成功', true));

        //phpinfo();
        //测试日志文件
        //Log::channel('daily')->info('[rabbitmq][success]消息发送成功123123' . PHP_EOL);
        //实例化
        //$myRabbitMQ = MyRabbitMQ::getInstance();
        //创建topic形式的路由
        //$myRabbitMQ->createTopicExchange('pcs.topic');
        //创建一个队列 并绑定key
        //$myRabbitMQ->createQueueAndBindExchange('test1', 'pcs.topic', ['test.test1', 'test1']);
        //生产一个消息
//        $data = ['name' => '王五', 'age' => 19];
//        $myRabbitMQ->sendMessageToTopic($data, 'pcs.topic', 'test1');
//        $callback = function ($msg) {
        // 消费成功
        //$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
        // 消费失败从队列中删除
        //$msg->delivery_info['channel']->basic_nack($msg->delivery_info['delivery_tag']);
        // 消费失败后可以自己写逻辑进行再次尝试 尝试多少次之后进行删除 并记录日志
        // 可能会有一个问题 如果逻辑判断有问题 可能出现一个消息重复发送多次的问题
        // 那么业务需要幂等 每次执行都是一个结果 例如发送了 下次再执行发送就不发送
        // 可以在redis中存一个uuid 当你执行了之后删除这个uuid 没有的话就不发送消息了
//        };
        //测试消费者
//        $myRabbitMQ->consumeMessage('test1', $callback);
        //测试延迟交换机
//        $myRabbitMQ->createXDelayedMessageExchange('demo.delay.topic');
        //延迟交换机绑定一个测试队列
//        $myRabbitMQ->createQueueAndBindExchange('delay.demo', 'demo.delay.topic', ['delay.delay1', 'delay1']);
    }
}
